(import (rnrs base)
        (only (guile)
              lambda* λ)
        ;; GNU Guile batteries
        (ice-9 exceptions)
        ;; custom libraries
        (command-line)
        (vocabulary-data)
        (json-reader)
        (json-writer)
        (print-utils)
        (interact)
        ;; custom helper libraries
        (list-procs)
        (alist-procs)
        ;; SRFIs
        ;; SRFI 43 - vector procs
        (srfi srfi-43)
        ;; SRFI 69 - hash tables
        (srfi srfi-69)
        ;; other libs
        (json))

;; ==========
;; ENTRYPOINT
;; ==========

(define main
  (λ (options)
    (let ([vocabulary
           (read-vocabulary
            (hash-table-ref/default options
                                    "vocabulary"
                                    "default-vocabulary.json"))])
      ;; (print-limited vocabulary)
      ;; (print-limited (get:vocabulary/nth-entry vocabulary 0))
      (interactive-loop vocabulary options))))


(let ([options (parse-arguments (program-arguments))])
  (simple-format #f "~a\n" options)
  (main options))
